package com.aigou.admin.dao.impl;
import com.aigou.admin.dao.UserDAO;
import com.aigou.admin.entity.User;
import com.aigou.admin.util.JDBCUtils;

import java.util.List;

/**
 * 用户数据接口实现类，用于实现数据库操作
 */
public class UserDAOImpl implements UserDAO {
    /**
     * 选择所有用户
     * @return List<User> 返回用户列表如果列表为空，则返回null
     */


    @Override
    /**
     * 查询所有用户信息
     *
     * 通过访问数据库，获取用户表中的所有记录，并将它们封装成User对象列表返回
     * 这个方法主要用来实现用户信息的批量查询功能
     *
     * @return 用户对象列表，包含数据库中所有用户的信息
     */
    public List<User> selectAll() {
        // 执行SQL查询，获取所有用户信息
        // users列表里面存着一个个User对象，其中每个User对象封装了一行数据库中的记录
        List<User> users = JDBCUtils.executeQuery(User.class,"select * from s_user");
        // 返回查询结果
        return users;
    }

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId 用户ID
     * @return 用户对象，如果用户不存在，则返回null
     */

    @Override
    /**
     * 根据用户ID查询用户信息
     * 此方法通过JDBC工具类执行SQL语句来查询数据库中的用户信息
     * 如果找到匹配的用户，则返回该用户对象；如果未找到，则返回null
     *
     * @param userId 用户ID，用于数据库查询的条件
     * @return User 返回查询到的用户对象，如果没有找到匹配的用户，则返回null
     */
    public User selctById(String userId) {
        // 执行SQL查询，获取用户列表
        List<User> users = JDBCUtils.executeQuery(User.class,"select * from s_user where user_id=?",userId);

        // 检查查询结果是否为空
        if (users.isEmpty()){
            // 如果结果为空，返回null
            return null;
        }
        // 如果查询到用户，返回第一个用户对象
        return users.get(0);
    }

    /**
     *  插入新用户
     * @param user
     * @return
     */

    @Override
    /**
     * 插入用户信息到数据库
     *
     * 此方法使用JDBC工具类执行SQL语句，将用户对象的信息插入到数据库中
     * 它通过预编译SQL语句来提高性能和安全性，防止SQL注入攻击
     *
     * @param user 要插入数据库的用户对象，包含用户ID、用户名、用户密码和用户类型
     * @return 返回一个布尔值，表示用户信息是否成功插入数据库中
     *         如果返回true，表示插入成功；如果返回false，表示插入失败
     */
    public boolean insert(User user) {
        int rows = JDBCUtils.executeUpdate("insert into s_user(user_id,user_name,user_pwd,user_type) values(?,?,?,?)",
                user.getUser_id(),user.getUser_name(),user.getUser_pwd(),user.getUser_type());
        return rows > 0;
    }

    /**
     * 删除用户
     * @param userId
     * @return
     */
    @Override
    public boolean delete(String userId) {
        int rows = JDBCUtils.executeUpdate("delete from s_user where user_id=?",userId);
        //如果返回true，表示插入成功；如果返回false，表示插入失败
        return rows > 0;
    }

    /**
     * 更新用户信息
     * @param user
     * @return
     */
    @Override
    /**
     * 更新用户信息
     *
     * 该方法通过指定的用户对象来更新数据库中对应用户的信息它使用了JDBCUtils工具类来执行SQL更新语句，
     * 并根据受影响的行数来判断更新操作是否成功
     *
     * @param user 要更新的用户对象，包含用户的新信息
     * @return 返回一个布尔值，表示更新操作是否成功如果受影响的行数大于0，则表示更新成功，否则更新失败
     */
    public boolean update(User user) {
        // 执行更新SQL语句，设置用户的新信息
        int rows = JDBCUtils.executeUpdate("update s_user set user_name=?,user_pwd=?,user_type=? where user_id=?",
                user.getUser_name(), user.getUser_pwd(), user.getUser_type(), user.getUser_id());
        // 根据受影响的行数判断更新操作是否成功
        return rows > 0;
    }
}
